package gameLogic

//人物和怪物都有的属性
type BaseProps struct {
	ObjName        string   `json:"ObjName"`
	Attack         int64    `json:"Attack"`         //玩家攻击力
	Magic          int64    `json:"Magic"`          //玩家法强
	Hp             int64    `json:"Hp"`             //玩家血量
	PhyDefence     int64    `json:"PhyDef"`         //防御
	MgiDefence     int64    `json:"MgiDef"`         //魔抗
	Speed          uint32   `json:"Speed"`          //攻速，以epoch为单位,最快为1
	MissRate       float32  `json:"MissRate"`       //丢失率，攻击时有概率丢失攻击
	CritRate       float32  `json:"CritRate"`       //暴击率
	CritDamageRate float32  `json:"CritDamageRate"` //暴击伤害倍数
	Package        []string `json:"Package"`        //背包物品
	Level          int64    `json:"Level"`          //等级
	Exp            int64    `json:"Exp"`            //经验
}

func (s BaseProps) IsDead() bool {
	return s.Hp <= 0
}

//初始化基础属性
func (s *BaseProps) Init() {
	s.ObjName = "Undefined"
	s.Attack = 5
	s.Hp = 100
	s.Level = 1
	s.Exp = 10
	s.Speed = 2 * (1000 / kMinTimeMs)
	s.PhyDefence = 30
}

//将UserInfo和Enemy抽象,用于攻击函数，敌人和人相互攻击
type Role interface {
	GetProps() BaseProps
}

type UserInfo struct {
	Props        BaseProps
	Name         string `json:"Name"`
	Pwd          string `json:"pwd"`
	CurrentScene string `json:"currentScene"` //玩家当前所在场景，重要属性，遍历玩家需要这个去计算
}

func (s *UserInfo) Init() {
	s.Props.Init()
	s.CurrentScene = kDefaultScene
}

func (s *UserInfo) GetProps() BaseProps {
	return s.Props
}

func (s UserInfo) getScene() string {
	if s.CurrentScene == "" {
		return kDefaultScene
	}
	return s.CurrentScene
}

type Enemy struct {
	Props BaseProps
}

func (s *Enemy) GetProps() BaseProps {
	return s.Props
}
